トップへ戻るニュースフォーラムFLASH-ML 過去ログBak@Flaダウンロードよくある質問と答
ログイン
ユーザ名:

パスワード:


パスワード紛失

新規登録
メインメニュー
メイン
   迷える子羊の部屋【初心者専用】
     アタッチしたMCを順次フェードインさせる方法
投稿するにはまず登録を

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
hiraoka_y
Åê¹ÆNo.35059
投稿日時: 2007-9-11 21:04
新米
居住地: 東京
投稿: 12
使用環境:
MacOS10,Flash8
アタッチしたMCを順次フェードインさせる方法
hiraoka_y と申します。
よろしくお願いします。

制作環境:WinXP Flash8

現在、縦横30pxの四角形のムービークリップを縦5列、横5列、に
計25個をアタッチして整列させています。

これらを左上から順にフェードインしてくるものにしたいのですが、うまくいきません。

setIntervalを使うのではと試してみたのですが、どなたかご教授願えませんでしょうか。
以下現状のスクリプトです。

現在は一番最後の右下の四画のみがフェードインしていまいます。
-----------------------------------------------------------
var cont:Number = 25;
for (i = 0; i < cont; i++) {
this.attachMovie("_mc", "_mc" + i, i, {_alpha:0});
this["_mc" + i]._x = (i % 5) * 35 + 10;
this["_mc" + i]._y = Math.floor(i / 5) * 35 + 10;
var mc:MovieClip = this["_mc" + i];
mc.square = function() {
mc.onEnterFrame = function() {
mc._alpha += 5;
if (mc._alpha >= 100) {
delete onEnterFrame;
}
};
};
}
nId = setInterval(mc, "square", 500);
-----------------------------------------------------------

つたない説明となってしまい、大変申し訳ありませんが宜しくお願い致します。
野中文雄
Åê¹ÆNo.35060
投稿日時: 2007-9-11 21:17
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: アタッチしたMCを順次フェードインさせる方法
うまくいきません」というのは、ご説明になりません。変数mcには、どういう値が入っていることを期待されていますか?
引用:
hiraoka_yさんは書きました:
これらを左上から順にフェードインしてくるものにしたいのですが、うまくいきません。
...[中略]...
var cont:Number = 25;
for (i = 0; i < cont; i++) {
	this.attachMovie("_mc", "_mc" + i, i, {_alpha:0});
	this["_mc" + i]._x = (i % 5) * 35 + 10;
	this["_mc" + i]._y = Math.floor(i / 5) * 35 + 10;
	var mc:MovieClip = this["_mc" + i];
	mc.square = function() {
		trace(mc);
		mc.onEnterFrame = function() {
			mc._alpha += 5;
			if (mc._alpha >= 100) {
				delete onEnterFrame;
			}
		};
	};
}
nId = setInterval(mc, "square", 500);

mcの値がひとつなら、そのひとつの値に対してしか処理が行われないのは当然です。

参考:「forループでMovieClipに設定したイベントハンドラメソッドから変数を参照する


----------------
 

ひろゆき
Åê¹ÆNo.35061
投稿日時: 2007-9-11 21:35
ちょんまげら
居住地: 大阪密林
投稿: 3702
使用環境:
10.3.9/10.6.2

CS3/CS4 Pro
Flex 2/3 SDK
Pro8.0
Pro7.2

FlashPlayer
7.0r24/8.0r24/9.0r115/10.0r45
Safari 1.3.2/4.0.4
Firefox 2.0.0.20/3.5.7

MacOS 9.2.2
Flash 4/5
Re: アタッチしたMCを順次フェードインさせる方法
for 文では、同時に、attachMovie されますから、
同時に生成・フェードインが始まってしまいますね。

(1) 順に生成 -> すぐにフェードイン
(2) 一度に生成 -> 順にフェードイン
のいずれかの方法があるのではないでしょうか?

方法 (1)
var cont:Number = 25;
var i:Number = 0;
var id:Number = setInterval(this, "createAndFadeIn", 500);
function createAndFadeIn():Void {
	var mc:MovieClip = this.attachMovie("_mc", "_mc" + i, i, {_alpha: 0});
	mc._x = (i % 5) * 35 + 10;
	mc._y = Math.floor(i / 5) * 35 + 10;
	mc.onEnterFrame = function():Void {
		this._alpha += 5;
		if (this._alpha >= 100) {
			this._alpha = 100;
			delete this.onEnterFrame;
		}
	};
	i ++;
	if (i >= cont) {
		clearInterval(id);
	}
}

方法 (2)
var cont:Number = 25;
for (var i:Number = 0; i < cont; i++) {
	var mc:MovieClip = this.attachMovie("_mc", "_mc" + i, i, {_alpha: 0});
	mc._x = (i % 5) * 35 + 10;
	mc._y = Math.floor(i / 5) * 35 + 10;
	mc.square = function():Void {
		this.onEnterFrame = function():Void {
			this._alpha += 5;
			if (this._alpha >= 100) {
				this._alpha = 100;
				delete this.onEnterFrame;
			}
		};
	};
}
var n:Number = 0;
var id:Number = setInterval(this, "startFadeIn", 500);
function startFadeIn():Void {
	var target:MovieClip = this["_mc"+n];
	target.square();
	n ++;
	if (n >= cont) {
		clearInterval(id);
	}	
}


(3) フェードイン・タイマーを内蔵させる という手もありますね。

方法 (3)
var cont:Number = 25;
for (var i:Number = 0; i < cont; i++) {
	var mc:MovieClip = this.attachMovie("_mc", "_mc" + i, i, {_alpha: 0});
	mc._x = (i % 5) * 35 + 10;
	mc._y = Math.floor(i / 5) * 35 + 10;
	mc.id = setInterval(mc, "fadeIn", 500*(i+1));
	mc.fadeIn = function():Void {
		clearInterval(this.id);
		this.onEnterFrame = function():Void {
			this._alpha += 5;
			if (this._alpha >= 100) {
				this._alpha = 100;
				delete this.onEnterFrame;
			}
		};
	};
}


----------------
質問する際は、回答者に具体的な情報を与えてくださいなのニャ!

永井勝則
Åê¹ÆNo.35068
投稿日時: 2007-9-12 0:11
職人
居住地: 白馬村
投稿: 751
使用環境:
Windows 7 :Flash CS4:
10.5.8 :Flash CS4
Re: アタッチしたMCを順次フェードインさせる方法
タイトルが「アタッチしたMCを順次フェードインさせる方法」ということなので、Tweenクラスを使った方法を考えてみました、
というよりもTweenクラスを使っただけです。

import mx.transitions.Tween;
import mx.transitions.easing.*;
var index:Number = 1;
var mcList:Array = new Array();
var frames:Number = 10;
var cont:Number = 25;
var myTween:Tween;
//ここから
for (i=0; i<cont; i++) {
	var mc:MovieClip = this.attachMovie("_mc", "_mc"+i, i, {_alpha:0});
	mc._x = (i%5)*35+10;
	mc._y = Math.floor(i/5)*35+10;
//ここまでは引用なので同じ
	mcList.push(mc);
}
function fadeIn(index):Void {
	myTween = new Tween(mcList[index], "_alpha", Strong.easeIn, 0, 100, frames, false);
	myTween.onMotionFinished = function() {
		index++;
		fadeIn(index);
		if (index>=mcList.length) {
			myTween.stop();
		}
	};
}
fadeIn(0);

この方法の欠点はSWFファイルのファイルサイズがひろゆきさんの方法より大きくなることと、
トゥイーンが終了するのを待っているので、全体の中で1つしかフェードインしていないことです。
ひろゆきさんの方法は2つくらいフェードインしているように見えるので、グラデーション効果がきれいです。

フェードインするムービークリップを手作業で作る方法もあります。
つまりムービークリップのタイムラインを使ってフェードさせるムービークリップを作り、それをコードでステージに配置します。
たぶん配置したら全部がほぼ同時にフェードインするので、
ムービークリップにはstop();を入れておいて、
ステージに作成したムービークリップを配列に入れ、適当な時間間隔で配列内のムービークリップに対してplay()を実行すると、フェードインは制御できます。


----------------
永井勝則:
himco.jp :

野中文雄
Åê¹ÆNo.35069
投稿日時: 2007-9-12 0:40
ちょんまげら
居住地: 東京
投稿: 4247
使用環境:
CS4 .4.11 Vista Home Premium (SP1)
Re: アタッチしたMCを順次フェードインさせる方法
終了を待たずに、続けざまにTweenを実行してもよいですね。
引用:
永井勝則さんは書きました:
トゥイーンが終了するのを待っているので、全体の中で1つしかフェードインしていないことです。

import mx.transitions.Tween;
import mx.transitions.easing.*;
var mcList:Array = new Array();
var frames:Number = 10;
var cont:Number = 25;
var myTween:Tween;
for (i=0; i<cont; i++) {
	var mc:MovieClip = this.attachMovie("_mc", "_mc"+i, i, {_alpha:0});
	mc._x = (i%5)*35+10;
	mc._y = Math.floor(i/5)*35+10;
	mcList.push(mc);
}
function fadeIn():Void {
	var _mc:MovieClip = MovieClip(mcList.shift());
	var myTween:Tween = 
	new Tween(_mc, "_alpha", Strong.easeIn, 0, 100, frames, false);
	if (mcList.length<1) {
		clearInterval(nID);
	}
}
fadeIn();
var nID:Number = setInterval(fadeIn, 500);


----------------
 

hiraoka_y
Åê¹ÆNo.35070
投稿日時: 2007-9-12 2:36
新米
居住地: 東京
投稿: 12
使用環境:
MacOS10,Flash8
Re: アタッチしたMCを順次フェードインさせる方法
野中様 ひろゆき様 永井様

まずはご連絡遅れました事深くお詫びいたします。
お忙しい所ご返信ありがとうございます。

またご質問内容が説明不足だったことも重ね重ねお詫びいたします。


>野中様
ご指摘恐れ入ります。
参考文献もありがとうございました。
こちら読み返して再考してみます。皆様のご指摘やご回答いただいたサンプルソースを拝見しまして、考え方の根本が間違っていたようです。

>ひろゆき様
参考コードありがとうございます。
大変分かりやすくご回答して頂き恐れ入ります。
フェードイン・タイマーを内臓させるやり方は大変参考になりました。こちらで一から再考し直して見たいと思います。

>永井様
ご回答ありがとうございました。
Tweenクラスを使用したやり方、大変興味を持ちました。
Tweenクラスのこのような使い方をご教授頂き、大変勉強になりました。
こちらも参考にさせて頂きます。


最後になりましたが、皆様お忙しい中要点がまとまっていない質問にも関わらず、ご回答頂きましてありがとうございました。
こちら参考にさせて頂きます、どのご回答も大変勉強になります。

それでは今後とも宜しくお願いいたします。
ありがとうございました。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ

投稿するにはまず登録を
 
Copyright (C) 2003 FLASH-japan. All rights reserved.
Powered by Xoops